package cn.iocoder.yudao.module.of.dal.mysql.taskinfo;

import cn.iocoder.yudao.framework.common.core.SysConstants;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
import cn.iocoder.yudao.module.of.dal.dataobject.taskinfo.TaskInfoDO;
import cn.iocoder.yudao.module.of.enums.TaskStatusEnum;
import org.apache.ibatis.annotations.Mapper;

/**
 * 任务模块 Mapper
 *
 * @author 超级管理员
 */
@Mapper
public interface TaskInfoMapper extends BaseMapperX<TaskInfoDO> {

    /**
     * 构造含权限的查询条件
     *
     * @return queryWrapper
     */
    default MPJLambdaWrapperX<TaskInfoDO> getQueryWrapper() {
        Long tenantId = TenantContextHolder.getRequiredTenantId();

        MPJLambdaWrapperX<TaskInfoDO> queryWrapper = new MPJLambdaWrapperX<>();
        /*if (tenantId.equals(SysConstants.TOP_TENANT_ID)) {
            queryWrapper.and(q -> q.eq(TaskInfoDO::getTenantId, SysConstants.TOP_TENANT_ID)
                    .or().eq(TaskInfoDO::getLeaderAssign, 1));
        } else {
            queryWrapper.eq(TaskInfoDO::getTenantId, tenantId);
            queryWrapper.eq(TaskInfoDO::getLeaderAssign, 0);
        }*/

        return queryWrapper;
    }


    /**
     * 更新任务状态
     *
     * @param id          任务id
     * @param status      状态
     * @param containsSub 是否含子任务，当是子任务时，传递false即可，就是更新自己
     */
    default void updateStatus(Long id, TaskStatusEnum status, boolean containsSub) {
        if (containsSub) {
            update(new TaskInfoDO().setStatus(status.getStatus()), new LambdaQueryWrapperX<TaskInfoDO>()
                    .eq(TaskInfoDO::getId, id).or().eq(TaskInfoDO::getParentId, id));
        } else {
            update(new TaskInfoDO().setStatus(status.getStatus()), new LambdaQueryWrapperX<TaskInfoDO>()
                    .eq(TaskInfoDO::getId, id));
        }

    }
}